FollowListItem.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import Link from 'next/link';
  2. import { BadgeCheck } from 'lucide-react';
  3. import FollowButton from '@/app/component/FollowButton';
  4. import { FollowMember } from '@/types/account/follow';
  5. type Props = {
  6. member: FollowMember;
  7. };
  8. export default function FollowListItem({ member }: Props) {
  9. const displayName = member.name ?? member.sid;
  10. const avatarInitial = (displayName.charAt(0) || '?').toUpperCase();
  11. return (
  12. <li className="user-profile__follow-item">
  13. <Link
  14. href={`/user/${member.sid}`}
  15. className="user-profile__follow-avatar"
  16. aria-label={`${displayName} 프로필 보기`}
  17. >
  18. {member.thumb ? (
  19. <img src={member.thumb} alt="" className="user-profile__follow-avatar-img" />
  20. ) : (
  21. <span className="user-profile__follow-avatar-fallback" aria-hidden="true">{avatarInitial}</span>
  22. )}
  23. </Link>
  24. <div className="user-profile__follow-body">
  25. <Link href={`/user/${member.sid}`} className="user-profile__follow-name">
  26. <span className="user-profile__follow-name-text">{displayName}</span>
  27. {member.isCreator && (
  28. <span className="user-profile__follow-badge" aria-label="크리에이터">
  29. <BadgeCheck size={14} fill="currentColor" stroke="#fff" strokeWidth={2.5} aria-hidden="true" />
  30. </span>
  31. )}
  32. </Link>
  33. <span className="user-profile__follow-handle">@{member.sid}</span>
  34. {member.summary && (
  35. <p className="user-profile__follow-summary">{member.summary}</p>
  36. )}
  37. </div>
  38. <FollowButton memberSID={member.sid} className="user-profile__follow-btn" />
  39. </li>
  40. );
  41. }